// 项目开发依赖
var gulp = require("gulp");
var browserify = require("browserify");
var babelify = require("babelify");
var source = require("vinyl-source-stream");
var watchify = require('watchify');
// 最基础的工具  打日志
var gutil = require('gulp-util');
// 专业压缩 Javascript
var uglify = require('gulp-uglify');
// 处理 JavaScript 时生成 SourceMap
var sourcemaps = require('gulp-sourcemaps');
var buffer = require('vinyl-buffer');
var livereload = require('gulp-livereload');

var paths = {
    pages: ['src/template/*.html']
};

// 添加自定义 browserify 选项  assign插件
var opts = {
    basedir: '.',
    debug: true,
    entries: ['src/react_demo/demo1.jsx'],
    cache: {},
    packageCache: {}
}
var watchedBrowserify = watchify(browserify(opts));

// js输出生成文件路径及文件名称
function bundle() {
    return watchedBrowserify
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(gulp.dest("build/react_public"));
}

// 复制 paths路径源文件
gulp.task('copy-html', function() {
    return gulp.src(paths.pages)
        .pipe(gulp.dest('build'));
});

// 添加监听(适用于浏览器环境)["copy-html"], (不能使用)
gulp.task("default-watchify",  bundle);


gulp.task('default', function(){
    var customOpts = {
        basedir: '.',
        debug: true,
        entries: ['src/react_demo/demo1.jsx'],
        cache: {},
        packageCache: {}
    };
  return browserify(customOpts)
         .transform(babelify)
         .bundle()
         .pipe(source('bundle.js'))
         // 可选项，如果你不需要缓存文件内容，就删除
        //  .pipe(buffer())
         // 可选项，如果你不需要 sourcemaps，就删除
        //  .pipe(sourcemaps.init({ loadMaps: true })) // 从 browserify 文件载入 map
        //  .pipe(uglify())
         .pipe(sourcemaps.write('./')) //写入 .map 文件
         .pipe(gulp.dest('build/react_public'));
});

// 监听构建react
gulp.task('react_watch', () => {
    var watcher = gulp.watch('src/react_demo/*.jsx', ['default']); 
    watcher.on('change', () => {
        console.log('file change');
    })
});

gulp.task('watch', function() { //这里的watch，是自定义的，携程live或者别的也行  
    var server = livereload();  
    // app/**/*.* 的意思是 app 文件夹下的 任何文件夹 的 任何文件  
    gulp.watch('src/**/*.*', function(file) {  
        server.changed(file.path);  
    });  
});

// 当任何依赖发生改变的时候，运行打包工具
watchedBrowserify.on("update", bundle);
// 输出编译日志到终端
watchedBrowserify.on("log", gutil.log);